
using Mono.Cecil.Cil;
using Mono.Collections.Generic;

using RVA = System.UInt32;
using System.Diagnostics;

namespace Mono.Cecil
{

    [DebuggerDisplay("{ToString()}", Name = "Method Definition")]
    public class MethodDefinitionTypeResolved : MethodDefinition
    {


        private MethodDefinition mabase;

        public MethodDefinitionTypeResolved(MethodDefinition mabase)
        {
            this.mabase = mabase;
        }


        public override MethodAttributes Attributes
        {
            get { return this.mabase.Attributes; }
            set { this.mabase.Attributes = value; }
        }

        public override MethodImplAttributes ImplAttributes
        {
            get { return this.mabase.ImplAttributes; }
            set { this.mabase.ImplAttributes = value; }
        }

        public override MethodSemanticsAttributes SemanticsAttributes
        {
            get { return this.mabase.SemanticsAttributes; }
            set { this.mabase.SemanticsAttributes = value; }
        }

        internal override void ReadSemantics()
        {
            this.mabase.ReadSemantics();
        }

        public override bool HasSecurityDeclarations
        {
            get { return this.mabase.HasSecurityDeclarations; }
        }

        public override Collection<SecurityDeclaration> SecurityDeclarations
        {
            get { return this.mabase.SecurityDeclarations; }

        }

        public override bool HasCustomAttributes
        {
            get { return this.mabase.HasCustomAttributes; }

        }

        public override Collection<CustomAttribute> CustomAttributes
        {
            get { return this.mabase.CustomAttributes; }

        }

        public override int RVA
        {
            get { return this.mabase.RVA; }

        }

        public override bool HasBody
        {
            get { return this.mabase.HasBody; }
        }

        public override MethodBody Body { get { return this.mabase.Body; } }

        public override bool HasPInvokeInfo
        {
            get { return this.mabase.HasPInvokeInfo; }
        }

        public override PInvokeInfo PInvokeInfo
        {
            get { return this.mabase.PInvokeInfo; }
            set { this.mabase.PInvokeInfo = value; }
        }

        public override bool HasOverrides
        {
            get { return this.mabase.HasOverrides; }
        }

        public override Collection<MethodReference> Overrides
        {
            get { return this.mabase.Overrides; }

        }

        public override bool HasGenericParameters
        {
            get { return this.mabase.HasGenericParameters; }

        }

        public override Collection<GenericParameter> GenericParameters { get { return this.mabase.GenericParameters; } }

        #region MethodAttributes

        public override bool IsCompilerControlled
        {
            get { return this.mabase.IsCompilerControlled; }
            set { this.mabase.IsCompilerControlled = value; }
        }

        public override bool IsNotPublic
        {
            get { return this.mabase.IsNotPublic; }
            set { this.mabase.IsNotPublic = value; }
        }

        public override bool IsFamilyAndAssembly
        {
            get { return this.mabase.IsFamilyAndAssembly; }
            set { this.mabase.IsFamilyAndAssembly = value; }
        }

        public override bool IsAssembly
        {
            get { return this.mabase.IsAssembly; }
            set { this.mabase.IsAssembly = value; }
        }

        public override bool IsFamily
        {
            get { return this.mabase.IsFamily; }
            set { this.mabase.IsFamily = value; }
        }

        public override bool IsFamilyOrAssembly
        {
            get { return this.mabase.IsFamilyOrAssembly; }
            set { this.mabase.IsFamilyOrAssembly = value; }
        }

        public override bool IsPublic
        {
            get { return this.mabase.IsPublic; }
            set { this.mabase.IsPublic = value; }
        }

        public override bool IsStatic
        {
            get { return this.mabase.IsStatic; }
            set { this.mabase.IsStatic = value; }
        }

        public override bool IsFinal
        {
            get { return this.mabase.IsFinal; }
            set { this.mabase.IsFinal = value; }
        }

        public override bool IsVirtual
        {
            get { return this.mabase.IsVirtual; }
            set { this.mabase.IsVirtual = value; }
        }

        public override bool IsHideBySig
        {
            get { return this.mabase.IsHideBySig; }
            set { this.mabase.IsHideBySig = value; }
        }

        public override bool IsReuseSlot
        {
            get { return this.mabase.IsReuseSlot; }
            set { this.mabase.IsReuseSlot = value; }
        }

        public override bool IsNewSlot
        {
            get { return this.mabase.IsNewSlot; }
            set { this.mabase.IsNewSlot = value; }
        }

        public override bool IsCheckAccessOnOverride
        {
            get { return this.mabase.IsCheckAccessOnOverride; }
            set { this.mabase.IsCheckAccessOnOverride = value; }
        }

        public override bool IsAbstract
        {
            get { return this.mabase.IsAbstract; }
            set { this.mabase.IsAbstract = value; }
        }

        public override bool IsSpecialName
        {
            get { return this.mabase.IsSpecialName; }
            set { this.mabase.IsSpecialName = value; }
        }

        public override bool IsPInvokeImpl
        {
            get { return this.mabase.IsPInvokeImpl; }
            set { this.mabase.IsPInvokeImpl = value; }
        }

        public override bool IsUnmanagedExport
        {
            get { return this.mabase.IsUnmanagedExport; }
            set { this.mabase.IsUnmanagedExport = value; }
        }

        public override bool IsRuntimeSpecialName
        {
            get { return this.mabase.IsRuntimeSpecialName; }
            set { this.mabase.IsRuntimeSpecialName = value; }
        }

        public override bool HasSecurity
        {
            get { return this.mabase.HasSecurity; }
            set { this.mabase.HasSecurity = value; }
        }

        #endregion

        #region MethodImplAttributes

        public override bool IsIL
        {
            get { return this.mabase.IsIL; }
            set { this.mabase.IsIL = value; }
        }

        public override bool IsNative
        {
            get { return this.mabase.IsNative; }
            set { this.mabase.IsNative = value; }
        }

        public override bool IsRuntime
        {
            get { return this.mabase.IsRuntime; }
            set { this.mabase.IsRuntime = value; }
        }

        public override bool IsUnmanaged
        {
            get { return this.mabase.IsUnmanaged; }
            set { this.mabase.IsUnmanaged = value; }
        }

        public override bool IsManaged
        {
            get { return this.mabase.IsManaged; }
            set { this.mabase.IsManaged = value; }
        }

        public override bool IsForwardRef
        {
            get { return this.mabase.IsForwardRef; }
            set { this.mabase.IsForwardRef = value; }
        }

        public override bool IsPreserveSig
        {
            get { return this.mabase.IsPreserveSig; }
            set { this.mabase.IsPreserveSig = value; }
        }

        public override bool IsInternalCall
        {
            get { return this.mabase.IsInternalCall; }
            set { this.mabase.IsInternalCall = value; }
        }

        public override bool IsSynchronized
        {
            get { return this.mabase.IsSynchronized; }
            set { this.mabase.IsSynchronized = value; }
        }

        public override bool NoInlining
        {
            get { return this.mabase.NoInlining; }
            set { this.mabase.NoInlining = value; }
        }

        public override bool NoOptimization
        {
            get { return this.mabase.NoOptimization; }
            set { this.mabase.NoOptimization = value; }
        }

        #endregion

        #region MethodSemanticsAttributes

        public override bool IsSetter
        {
            get { return this.mabase.IsSetter; }
            set { this.mabase.IsSetter = value; }
        }

        public override bool IsGetter
        {
            get { return this.mabase.IsGetter; }
            set { this.mabase.IsGetter = value; }
        }

        public override bool IsOther
        {
            get { return this.mabase.IsOther; }
            set { this.mabase.IsOther = value; }
        }

        public override bool IsAddOn
        {
            get { return this.mabase.IsAddOn; }
            set { this.mabase.IsAddOn = value; }
        }

        public override bool IsRemoveOn
        {
            get { return this.mabase.IsRemoveOn; }
            set { this.mabase.IsRemoveOn = value; }
        }

        public override bool IsFire
        {
            get { return this.mabase.IsFire; }
            set { this.mabase.IsFire = value; }
        }

        #endregion

        public override TypeDefinition DeclaringType
        {
            get { return this.mabase.DeclaringType; }
            set { this.mabase.DeclaringType = value; }
        }

        public override bool IsConstructor
        {
            get { return this.mabase.IsConstructor; }
        }


        public override MethodDefinition Resolve()
        {
            return this;
        }

        #region MethodReference

        public virtual bool HasThis
        {
            get { return this.mabase.HasThis; }
            set { this.mabase.HasThis = value; }
        }

        public virtual bool ExplicitThis
        {
            get { return this.mabase.ExplicitThis; }
            set { this.mabase.ExplicitThis = value; }
        }

        public virtual MethodCallingConvention CallingConvention
        {
            get { return this.mabase.CallingConvention; }
            set { this.mabase.CallingConvention = value; }
        }

        public virtual bool HasParameters { get { return this.mabase.HasParameters; } }

        public virtual Collection<ParameterDefinition> Parameters { get { return this.mabase.Parameters; } }

        //IGenericParameterProvider IGenericContext.Type {
        //    get {

        //        return declaring_type;
        //    }
        //}

        public TypeReference ReturnType
        {
            get { return this.mabase.ReturnType; }
            set { this.mabase.ReturnType = value; }
        }


        public virtual MethodReturnType MethodReturnType
        {
            get { return this.mabase.MethodReturnType; }
            set { this.mabase.MethodReturnType = value; }
        }


        internal override bool ContainsGenericParameter
        {
            get { return this.mabase.ContainsGenericParameter; }

        }


        public virtual TypeReference Type(TypeReference sealedType)
        {
            return this.mabase.Type(sealedType);
        }


        #region MemberReference

        public override string Name
        {
            get { return this.mabase.Name; }
            set { this.mabase.Name = value; }
        }

        public override string FullName { get { return this.mabase.FullName; } }

        public override MetadataToken MetadataToken
        {
            get { return this.mabase.MetadataToken; }
            set { this.mabase.MetadataToken = value; }
        }

        internal override bool HasImage { get { return this.mabase.HasImage; } }

        public override ModuleDefinition Module { get { return this.mabase.Module; } }

        internal override string MemberFullName() { return this.mabase.MemberFullName(); }

        public override string ToString() { return this.mabase.FullName; }

        #endregion


        #endregion

    }

}
